<?php
#+------------------------------------------------------------------
#| 我曾七次鄙视自己的灵魂:
#| 第一次,当它本可进取时，却故作谦卑；
#| 第二次,当它空虚时，用爱欲来填充；
#| 第三次,在困难和容易之间，它选择了容易；
#| 第四次,它犯了错，却借由别人也会犯错来宽慰自己；
#| 第五次,它自由软弱，却把它认为是生命的坚韧；
#| 第六次,当它鄙夷一张丑恶的嘴脸时，却不知那正是自己面具中的一副；
#| 第七次,它侧身于生活的污泥中虽不甘心，却又畏首畏尾。
#+------------------------------------------------------------------
#| Author:Janmas Cromwell <janmas-cromwell@outlook.com>
#+------------------------------------------------------------------
namespace app\common\lib;

use GeoIp2\Database\Reader;
use think\Exception;
use think\facade\Log;

class Ip
{
    protected $reader;
    protected $origin = null;
    protected $result = [];

    public function __construct(string $ip = '')
    {
        $url = 'https://www.qvdv.com/tools/qvdv-ip-c.html?ipData=' . $ip . '&token=%242y%2410%24d.hk6IxwaruXAMebFU0L1uPH8.Q%2FRNDsp4IGUr7V5RjQH28bSsj7K&_=1633578323615';
        $this->origin = file_get_contents($url);
        echo $this->origin;

        if($this->origin){
            $this->result = json_decode($this->origin);
            if($this->result->data->status !== 'success'){
                echo 'ip解析失败'.PHP_EOL;
                throw new Exception('识别IP地理位置失败2');
            }
        }else{
            echo 'ip信息获取失败'.PHP_EOL;
            throw new Exception('识别IP地理位置失败1');
        }
       /* if(!is_file($databasePath)){
            throw new \Exception('数据库文件不存在');
        }
        $this->reader = new Reader($databasePath,['zh-CN']);
        if(empty($ip)){
            throw new Exception('请传入ip');
        }else if(!filter_var($ip, FILTER_VALIDATE_IP)){
            throw new Exception(' Ip 不合法');
        }

        $this->result = $this->reader->city($ip);*/
    }

    /**
     * 获取城市名称
     * @return string|null
     */
    public function city():string
    {
        return (string)$this->result->data->city;
    }

    /**
     * 获取省名称
     * @return string|null
     */
    public function province ():string
    {
        return (string)$this->result->data->regionName;
    }

    /**
     * 获取国家名
     * @return string|null
     */
    public function country():string
    {
        return (string)$this->result->data->country;
    }

    /**
     * 获取经纬度
     * @return \GeoIp2\Record\Location
     */
    public function location(){
        return $this->result->data->lat . ' ' . $this->result->data->lon;
    }

    /**
     * 获取纬度
     * @return mixed|string|null
     */
    public function lat(){
        return $this->result->data->lat;
    }

    /**
     * 获取经度
     * @return mixed|string|null
     */
    public function lon(){
        return $this->result->data->lon;

    }


    public function getOrigin(){
        return $this->origin;
    }
}